home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / netinet / RCS / ip_icmp.h,v < prev    next >
Text File  |  1988-06-29  |  4KB  |  156 lines

  1. head     1.2;
  2. access   ;
  3. symbols  ;
  4. locks    ; strict;
  5. comment  @ * @;
  6.  
  7.  
  8. 1.2
  9. date     88.06.29.15.11.08;  author ouster;  state Exp;
  10. branches ;
  11. next     1.1;
  12.  
  13. 1.1
  14. date     88.06.21.11.59.28;  author ouster;  state Exp;
  15. branches ;
  16. next     ;
  17.  
  18.  
  19. desc
  20. @@
  21.  
  22.  
  23. 1.2
  24. log
  25. @Add ifdefs to keep files from being processed twice.
  26. @
  27. text
  28. @/*
  29.  * Copyright (c) 1982, 1986 Regents of the University of California.
  30.  * All rights reserved.
  31.  *
  32.  * Redistribution and use in source and binary forms are permitted
  33.  * provided that this notice is preserved and that due credit is given
  34.  * to the University of California at Berkeley. The name of the University
  35.  * may not be used to endorse or promote products derived from this
  36.  * software without specific prior written permission. This software
  37.  * is provided ``as is'' without express or implied warranty.
  38.  *
  39.  *    @@(#)ip_icmp.h    7.3 (Berkeley) 12/7/87
  40.  */
  41.  
  42. #ifndef _IP_ICMP
  43. #define _IP_ICMP
  44.  
  45. /*
  46.  * Interface Control Message Protocol Definitions.
  47.  * Per RFC 792, September 1981.
  48.  */
  49.  
  50. /*
  51.  * Structure of an icmp header.
  52.  */
  53. struct icmp {
  54.     u_char    icmp_type;        /* type of message, see below */
  55.     u_char    icmp_code;        /* type sub code */
  56.     u_short    icmp_cksum;        /* ones complement cksum of struct */
  57.     union {
  58.         u_char ih_pptr;            /* ICMP_PARAMPROB */
  59.         struct in_addr ih_gwaddr;    /* ICMP_REDIRECT */
  60.         struct ih_idseq {
  61.             n_short    icd_id;
  62.             n_short    icd_seq;
  63.         } ih_idseq;
  64.         int ih_void;
  65.     } icmp_hun;
  66. #define    icmp_pptr    icmp_hun.ih_pptr
  67. #define    icmp_gwaddr    icmp_hun.ih_gwaddr
  68. #define    icmp_id        icmp_hun.ih_idseq.icd_id
  69. #define    icmp_seq    icmp_hun.ih_idseq.icd_seq
  70. #define    icmp_void    icmp_hun.ih_void
  71.     union {
  72.         struct id_ts {
  73.             n_time its_otime;
  74.             n_time its_rtime;
  75.             n_time its_ttime;
  76.         } id_ts;
  77.         struct id_ip  {
  78.             struct ip idi_ip;
  79.             /* options and then 64 bits of data */
  80.         } id_ip;
  81.         u_long    id_mask;
  82.         char    id_data[1];
  83.     } icmp_dun;
  84. #define    icmp_otime    icmp_dun.id_ts.its_otime
  85. #define    icmp_rtime    icmp_dun.id_ts.its_rtime
  86. #define    icmp_ttime    icmp_dun.id_ts.its_ttime
  87. #define    icmp_ip        icmp_dun.id_ip.idi_ip
  88. #define    icmp_mask    icmp_dun.id_mask
  89. #define    icmp_data    icmp_dun.id_data
  90. };
  91.  
  92. /*
  93.  * Lower bounds on packet lengths for various types.
  94.  * For the error advice packets must first insure that the
  95.  * packet is large enought to contain the returned ip header.
  96.  * Only then can we do the check to see if 64 bits of packet
  97.  * data have been returned, since we need to check the returned
  98.  * ip header length.
  99.  */
  100. #define    ICMP_MINLEN    8                /* abs minimum */
  101. #define    ICMP_TSLEN    (8 + 3 * sizeof (n_time))    /* timestamp */
  102. #define    ICMP_MASKLEN    12                /* address mask */
  103. #define    ICMP_ADVLENMIN    (8 + sizeof (struct ip) + 8)    /* min */
  104. #define    ICMP_ADVLEN(p)    (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
  105.     /* N.B.: must separately check that ip_hl >= 5 */
  106.  
  107. /*
  108.  * Definition of type and code field values.
  109.  */
  110. #define    ICMP_ECHOREPLY        0        /* echo reply */
  111. #define    ICMP_UNREACH        3        /* dest unreachable, codes: */
  112. #define        ICMP_UNREACH_NET    0        /* bad net */
  113. #define        ICMP_UNREACH_HOST    1        /* bad host */
  114. #define        ICMP_UNREACH_PROTOCOL    2        /* bad protocol */
  115. #define        ICMP_UNREACH_PORT    3        /* bad port */
  116. #define        ICMP_UNREACH_NEEDFRAG    4        /* IP_DF caused drop */
  117. #define        ICMP_UNREACH_SRCFAIL    5        /* src route failed */
  118. #define    ICMP_SOURCEQUENCH    4        /* packet lost, slow down */
  119. #define    ICMP_REDIRECT        5        /* shorter route, codes: */
  120. #define        ICMP_REDIRECT_NET    0        /* for network */
  121. #define        ICMP_REDIRECT_HOST    1        /* for host */
  122. #define        ICMP_REDIRECT_TOSNET    2        /* for tos and net */
  123. #define        ICMP_REDIRECT_TOSHOST    3        /* for tos and host */
  124. #define    ICMP_ECHO        8        /* echo service */
  125. #define    ICMP_TIMXCEED        11        /* time exceeded, code: */
  126. #define        ICMP_TIMXCEED_INTRANS    0        /* ttl==0 in transit */
  127. #define        ICMP_TIMXCEED_REASS    1        /* ttl==0 in reass */
  128. #define    ICMP_PARAMPROB        12        /* ip header bad */
  129. #define    ICMP_TSTAMP        13        /* timestamp request */
  130. #define    ICMP_TSTAMPREPLY    14        /* timestamp reply */
  131. #define    ICMP_IREQ        15        /* information request */
  132. #define    ICMP_IREQREPLY        16        /* information reply */
  133. #define    ICMP_MASKREQ        17        /* address mask request */
  134. #define    ICMP_MASKREPLY        18        /* address mask reply */
  135.  
  136. #define    ICMP_MAXTYPE        18
  137.  
  138. #define    ICMP_INFOTYPE(type) \
  139.     ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
  140.     (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
  141.     (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
  142.     (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
  143.  
  144. #endif _IP_ICMP
  145. @
  146.  
  147.  
  148. 1.1
  149. log
  150. @Initial revision
  151. @
  152. text
  153. @d15 3
  154. d116 2
  155. @
  156.